package org.lvgo.singleton.immediately;

/**
 * 无论后面程序是否使用,都随类加载的时候将该类的实例创建出来.
 * 如果后面不使用该实例,将会产生资源浪费
 * <p>
 * 这种方式比较常用，但容易产生垃圾对象。
 * 优点：没有加锁，执行效率会提高。
 * 缺点：类加载时就初始化，浪费内存。
 * <p>
 * 它基于 classloader 机制(天然线程安全)避免了多线程的同步问题，
 * 不过，instance 在类装载时就实例化，虽然导致类装载的原因有很多种，
 * 在单例模式中大多数都是调用 getInstance 方法，
 * 但是也不能确定有其他的方式（或者其他的静态方法）导致类装载，
 * 这时候初始化 instance 显然没有达到 lazy loading 的效果。
 *
 * @author lvgo
 * @version 1.0
 * @Description: 饿汉式单例模式, 立即加载
 * @date 18-8-22 上午11:33
 */
public class StraightwaySingleton {


    /**
     * 提供静态类实例,随类一起加载,立即加载.
     */
    private static StraightwaySingleton straightwaySingleton = new StraightwaySingleton();

    /**
     * 单例模式关键第一步,私有化构造器
     */
    private StraightwaySingleton() {
    }

    /**
     * 通过调用 getInstance() 方法获取实例
     *
     * @return StraightwaySingleton 实例
     */
    public static StraightwaySingleton getInstance() {
        return straightwaySingleton;
    }
}
